/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package de.jrpm.rnetze.controlling;

import de.jrpm.rnetze.controlling.services.EventService;
import de.jrpm.rnetze.pakete.Packet;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.text.SimpleDateFormat;
import java.util.Iterator;
import java.util.List;
import javax.swing.JToggleButton;
import de.jrpm.rnetze.datagramlogik.DatagramController;
import de.jrpm.rnetze.gui.services.EinstellungenService;
import de.jrpm.rnetze.gui.MainGui;
import de.jrpm.rnetze.gui.services.MainGuiService;
import de.jrpm.rnetze.gui.services.VisualisierungService;

/**
 *
 * @author blazy
 */
public class Controller implements EventService {

    private EinstellungenService einstellService;
    private VisualisierungService visualisierungService;
    private MainGuiService guiService;
    private DatagramController datagramController;

    public Controller() {
        MainGui gui = new MainGui(this);
        gui.setVisible(true);
        guiService = gui;
        einstellService = gui.getEinstellungenService();
        visualisierungService = gui.getVisualisierungService();
        datagramController = new DatagramController(this);
        einstellService.addIp(datagramController.getLocalHostAdress());
    }

    public void manageEvent(ActionEvent event) {
        String evt = event.getActionCommand();

        System.out.println("manageEvent : Event " + evt + " ausgelöst");

        if (evt.equals(EinstellungenService.CMD_ADDIP)) {
            cmd_addip();
        }
        if (evt.equals(EinstellungenService.CMD_START)) {
            cmd_start();
        }
        if (evt.equals(VisualisierungService.CMD_CHANGEDELAY)) {
            cmd_changeDelay();
        }
        if (evt.equals(VisualisierungService.CMD_FORWARD)) {
            cmd_forward();
        }
        if (evt.equals(VisualisierungService.CMD_STOP)) {
            boolean b = ((JToggleButton) event.getSource()).isSelected();
            System.out.println("wert der übergeben wird: " + b);
            cmd_pause(b);
        }
    }

    public void managePacketEvent(int event) {
        if (event == DatagramController.EVENT_PAKET_ERHALTEN) {
            visualisierungService.changeShowPanel(VisualisierungService.ANZEIGE_MITTE, Color.GREEN, "Erhalten von \n" + datagramController.getPacketErhaltenVon());
            visualisierungService.changeShowPanel(VisualisierungService.ANZEIGE_LINKS, Color.GREEN, "Quittung an \n" + datagramController.getUrsprungsrechnerIp());
            visualisierungService.changeShowPanel(VisualisierungService.ANZEIGE_RECHTS, Color.RED, "");
        }
        if (event == DatagramController.EVENT_QUITTUNG_ERHALTEN) {
            String ziel = datagramController.getQuittung().getZiel();
            String quelle = datagramController.getQuittung().getQuelle();
            SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
            String zeit = formatter.format(datagramController.getQuittung().getUhrzeit());
            visualisierungService.appendQuittung(quelle + " schickte an " + ziel + " um " + zeit);
        }
        if (event == DatagramController.EVENT_VERSCHICKE_PACKET) {
            visualisierungService.changeShowPanel(VisualisierungService.ANZEIGE_MITTE, Color.RED, "");
            visualisierungService.changeShowPanel(VisualisierungService.ANZEIGE_RECHTS, Color.GREEN, "Verschicke an \n" + datagramController.getPacketSchickenAn());
            visualisierungService.changeShowPanel(VisualisierungService.ANZEIGE_LINKS, Color.RED, "");
        }
    }

    public static void main(String[] args) {
        new Controller();
    }

    private void cmd_addip() {
        String ip = einstellService.getJTF_ip();
        //TODO: IP auf korrektheit prüfen
        einstellService.addIp(ip);
    }

    private void cmd_start() {
        System.out.println("cmd_start : starte Paketversendung");
        guiService.switchTab(MainGuiService.VISUALISIERUNG);
        Packet packet = new Packet(einstellService.getIps(), einstellService.getDelay());

        datagramController.start(packet);
    }

    private void cmd_changeDelay() {
        datagramController.setDelay(visualisierungService.getDelay());
    }

    private void cmd_forward() {
        datagramController.sendPacketInstant();
    }

    private void cmd_pause(boolean b) {
        datagramController.setStop(b);
    }
}
